perm filename UDDT.PAL[ETH,REG] blob
sn#273553 filedate 1980-03-16 generic text, type C, neo UTF8
COMMENT ā VALID 00009 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .TITLE UDDT DDT FOR KL10 MICROMACHINE
C00003 00003 .= prints CRAM addr, ./ does an ALL, .[ prints CRAM addr and data
C00005 00004 E n step EBOX clock by n. Default n = 1.
C00006 00005 H halt EBOX clock, G restart EBOX clock
C00007 00006 B remove all breakpoints, B n set at n, B-n remove at n
C00010 00007 P procede EBOX clock single stepping
C00011 00008 PASS: MOV #LINBUF,R1
C00013 00009 UPATCH: .BLKW 40
C00014 ENDMK
Cā;
.TITLE UDDT DDT FOR KL10 MICROMACHINE
.ABS
FUQ2::
DTEASB==1 ;ASSEMBLE DTE20 DEFINITIONS
.XLIST
.INSRT PRM11
.LIST
.=3000
UDDT: PMSG <MICRO DDT.\>
MOV #DDZBEG,R0
ZLUP: CLR (R0)+
CMP R0,#DDZEND
BLO ZLUP
TOPL: PMSG <*>
TTILIN ;GET A LINE
TTICHR ;GET FIRST CHARACTER
CMPB R0,#'a
BLT TOP1
CMPB R0,#'z
BGT TOP1
SUB #40,R0
TOP1: MOV #CHRTBL,R1
TOP2: CMPB R0,(R1)
BEQ TOP3
TSTB (R1)+
BNE TOP2
BR TOPR
TOP3: SUB #CHRTBL,R1
ASL R1
JMP @DSPTBL(R1)
TOPR: PMSG < ??\>
TOPX: BR TOPL
;.= prints CRAM addr, ./ does an ALL, .[ prints CRAM addr and data
.CMD: TTICHR
BCS TOPR
CMPB R0,#'=
BEQ CRMADR
CMPB R0,#'/
BEQ ALL
CMPB R0,#'[
BEQ CRM
TOPR1: BR TOPR
CRMADR: JSR PC,GETCRA ;GET CURRENT CRAM ADDRESS INTO $ECADR
PMSG <CRA LOC = >
MOV $ECADR,R0
PNTODT
4
PCRLF
BR TOPX
GETCRA: DFRDT
RCRAM2 ;GET CRA LOC 05-10
JSR PC,$ECGET
PUSH $ECADR
DFRDT
RCRAM1 ;GET CRA LOC 00-04
POP R0
JSR PC,$ECGET
ASL R0 ;MOVE CRA LOC 05-10 TO BITS 6-0
ASL R0
SWAB R0
BISB R0,$ECADR
BIC #174000,$ECADR
RTS PC
$ECGET: MOV DTEADR+4,$ECADR ;GET EBUS BITS 4,5 TO HI TWO BITS OF HI BYTE
MOVB DTEADR+6,$ECADR ;GET EBUS BITS 0-3 TO LO 4 BITS OF LOW BYTE
SWAB $ECADR ;GET 0-5 TO BITS 11-6
BIC #170077,$ECADR
RTS PC
ALL: MOV #ALLADR,R0
PRGCMD
BR TOPX
CRM: JSR PC,GETCRA ;GET CURRENT CRAM ADDRESS INTO $ECADR
MOV #-1,R0
RCRAM ;READ CURRENT CRAM CONTENTS
MOV R0,R1 ;COPY DATA ADDRESS TO R1
MOV $ECADR,R0
PNTCRM ;PRINT CRAM ADDRESS AND DATA
PCRLF
TOPX1: BR TOPX
;E n step EBOX clock by n. Default n = 1.
ECMD: TTISDL ;DELETE SPACES
BCS ECMD1
TTIDEC ;GET DECIMAL NUMBER OF STEPS
BCS TOPR1
MOV R0,R1
BR ECMD2
ECMD1: TTERM
BCS TOPR1
MOV #1,R1
ECMD2: ECLOK ;SINGLE STEP THE EBOX CLOCK
BCS ECLKER
SOB R1,ECMD2
BR TOPX1
ECLKER: PMSG <CLK?\>
BR TOPX1
;H halt EBOX clock, G restart EBOX clock
HCMD: TTICHR
TTERM
BCS TOPR1
DFXCTT
STPCLK
DFXCTT
CECLK ;CONDITIONAL EBOX CLK
BR TOPX1
GCMD: TTICHR
TTERM
BCS TOPR1
DFXCTT
STRCLK
BR TOPX1
;B remove all breakpoints, B n set at n, B-n remove at n
BCMD: TTISDL
BCS CLRALL ;NON-NUMBER, CLEAR ALL BPTS
TTIOCT
BCS TOPR1 ;NOT OCTAL
BMI CLRBPT ;-ADDR MEANS CLEAR BPT AT THAT ADDR
JSR PC,FNDBPT ;SEE IF IT IS THERE ALREADY
BR SETBP1
BR TOPX1 ;IT'S ALREADY SET
SETBP1: JSR PC,FNDFRE ;FIND NEXT FREE BREAKPOINT SLOT
BR NOMORE
MOV R0,BPTADR(R1) ;STORE ADDRESS OF BREAKPOINT
MOV #-1,BPTUSE(R1) ;AND SET IN USE FLAG
BR TOPX1
NOMORE: PMSG <SORRY, NO FREE BREAKPOINT SLOTS\>
BR TOPX1
CLRALL: TTICHR
TTERM
BCS TOPR1
MOV #NBPT,R1
MOV #BPTUSE,R0
CLRAL1: CLR (R0)+
SOB R1,CLRAL1
BR TOPX1
CLRBPT: JSR PC,FNDBPT
BR NOTFND ;NO SUCH BREAKPOINT IS SET
CLR BPTUSE(R1)
BR TOPX1
NOTFND: PMSG <SORRY, NO BREAKPOINT THERE\>
TOPX2: BR TOPX1
;FIND A FREE BREAKPOINT SLOT, SKIP RETURN IF THERE IS ONE WITH INDEX IN R1
FNDFRE: MOV #NBPT,R2
MOV #BPTUSE,R1
FNDFR1: TST (R1)+
BPL FNDFR2
SOB R2,FNDFR1
RTS PC ;NO FREE BREAKPOINTS
FNDFR2: SUB #BPTUSE+2,R1 ;BREAKPOINT INDEX
ADD #2,(SP)
RTS PC
;FIND BREAKPOINT SLOT FOR ADDRESS IN R0
FNDBPT: MOV #NBPT,R2
MOV #BPTUSE,R1
FNDBP1: TST (R1)+
BMI FNDBP3
FNDBP2: SOB R2,FNDBP1
RTS PC ;DIDN'T FIND IT
FNDBP3: CMP R0,BPTADR-BPTUSE-2(R1)
BNE FNDBP2 ;DOESN'T MATCH
SUB #BPTUSE+2,R1 ;BREAKPOINT INDEX
ADD #2,(SP)
RTS PC
;P procede EBOX clock single stepping
TOPR2: JMP TOPR
PCMD: TTICHR
TTERM
BCS TOPR2
TTPINI ;RESET INPUT AND OUTPUT POINTERS
JSR PC,MSTEP ;MULTIPLE STEP
BR TOPX2
MSTEP: MOV #100.,LOOKCT
MSTEPL: ECLOK
BCS MSPCER ;CLOCK ERROR
JSR PC,GETCRA
MOV $ECADR,R0
JSR PC,FNDBPT ;IS THERE IS BREAKPOINT THERE
BR MSTEP1 ;NO, KEEP GOING
PMSG <\BREAKPOINT HIT AT >
MOV $ECADR,R0
PNTODT
4
PCRLF
RTS PC ;STOP STEPPING
MSTEP1: DEC LOOKCT
BGT MSTEPL
TTLOOK
BCS MSTEP ;NO INPUT
RTS PC ;STOP STEPPING IF ANYTHING TYPED
MSPCER: PMSG <MULTISTEPPING CLOCK ERROR\>
RTS PC
PASS: MOV #LINBUF,R1
PASS1: TTICHR
BCS PASS2
MOVB R0,(R1)+
BR PASS1
PASS2: CLRB (R1)
MOV #LINBUF,R0
PRGCMD ;GIVE COMMAND TO KLDCP
JMP TOPL
CHRTBL: .BYTE '.
.BYTE 'E
.BYTE 'H
.BYTE 'P
.BYTE 'G
.BYTE 'B
.BYTE '?
.BYTE 15
.BYTE 0
.EVEN
DSPTBL: .CMD
ECMD
HCMD
PCMD
GCMD
BCMD
PASS
TOPX
UPATCH: .BLKW 40
DDZBEG::
NBPT==100
BPTADR: .BLKW NBPT ;CRAM ADDRESS OF BREAKPOINT
BPTUSE: .BLKW NBPT ;-1 IT THIS BREAKPOINT IS IN USE
DDZEND::
LINBUF: .BLKB 80.
$ECADR: 0
LOOKCT: 0
ALLADR: .ASCIZ /ALL
/
.XLIST
$$LITT==.
.IF P2
.=$$CLIT
.ENDC
.LIST
.END UDDT